home *** CD-ROM | disk | FTP | other *** search
Lisp/Scheme | 1994-05-28 | 1.6 KB | 54 lines | [TEXT/xlsp] |
- #-:classes (load "classes")
-
- ; Make the class ship and its instance variables be known
-
- (defclass ship ((x 0) (y 0) (xv 0) (yv 0) (mass 0) (name 'unknown)
- (captain 'unknown) (registry 'unknown)))
-
- (defmethod ship :sail (time)
- ; the METHOD for sailing
- (princ (list "sailing for " time " hours\n"))
- ; note that this form is expressed in terms of objects: "self"
- ; is bound to the object being talked to during the execution
- ; of its message. It can ask itself to do things.
- (setf (send self :x)
- (+ (send self :x) (* (send self :xv) time)))
- ; This form performs a parallel action to the above, but more
- ; efficiently, and in this instance, more clearly
- (setq y (+ y (* yv time)))
- ; Cute message for return value. Tee Hee.
- "Sailing, sailing, over the bountiful chow mein...")
-
- ; <a SHIP: #12345667> is not terribly instructive. How about a more
- ; informative print routine?
-
- (defmethod ship :print () (princ (list
- "SHIP NAME: " (send self :name) "\n"
- "REGISTRY: " (send self :registry) "\n"
- "CAPTAIN IS: " (send self :captain) "\n"
- "MASS IS: " (send self :mass) " TONNES\n"
- "CURRENT POSITION IS: "
- (send self :x) " X BY "
- (send self :y) " Y\n"
- "SPEED IS: "
- (send self :xv) " XV BY "
- (send self :yv) " YV\n") ) )
-
-
- ; and an example object.
-
- (definst ship Bounty :mass 50
- :name 'Bounty
- :registry 'England
- :captain 'Bligh)
-
- (send Bounty :print)
-
- (definst ship lollipop :mass (+ 10 20) :captain 'Temple :x 1000 :y 2000)
-
- (send lollipop :print)
-
- (definst ship hard :mass 1000 :captain 'Bozo :registry 'North-pole )
-
- (send hard :print)
-